/**
 * 1. 渲染组件会用到
 * 2. 计算属性会用到
 * 3. vm.watch会用到
 * */
let id = 0; // 每个watcher都有一个唯一的标识
class Watcher {
    /**
     *
     * @param vm 当前组件的实例 new Vue
     * @param exprOrFn 用户可能传入的是一个表达式 也有可能传入的是一个函数
     * @param cb 用户传入的回调函数 vm.$watch('msg',cb)
     * @param opts 一些其他参数
     */
    constructor(vm,exprOrFn,cb=()=>{},opts={}) {
        this.vm = vm;
        this.exprOrFn = exprOrFn;
        if (typeof exprOrFn === 'function') {
            this.getter = exprOrFn; // 让getter等于new Watcher传入的第二个参数
        }
        this.cb = cb;
        this.opts = opts;
        this.id = id++;

        this.get(); // 让getter执行
    }

    get(){
        this.getter();
    }
}

export default Watcher;